Procédure
Étape 1. Partez d’un document R, R Markdown ou encore R Notebook ouvert dans RStudio. Dans notre cas, un R Notebook est ouvert à partir du projet Oursins créé dans le tutoriel sur les projets RStudio. Insérer un chunk R. (Si l’on part réellement du tutoriel project RStudio, le rapport est déjà sauvegardé… cela ne correspond pas à la copie d’écran actuelle!)
Étape 2. Sélectionnez le bouton Import Dataset dans la barre d’outils de l’onglet Environment. Sélectionnez le type de fichier souhaité. Dans le cas présent, un fichier Excel (From Excel).
Étape 3. Une boite de dialogue s’ouvre. cliquez sur le bouton Browse….
Étape 4. Sélectionnez le jeu de donnée OursinsIni.xlsx qui se trouve dans le dossier data.
Étape 5. Le jeu de donnée s’affiche dans la boite de dialogue Import Excel Data. Cette boite de dialogue est subdivisée en trois zones :
- Data Preview : prévisualisation des données,
- Import Options : options d’importation (cadre bleu) et
- Code Preview : prévisualisation des instructions pour l’importation (cadre orange).
Étape 6. Différents paramètres peuvent être employés afin d’importer le jeu de donnée correctement dans la partie Import Options. Il est crucial de bien les choisir :
- Name : le nom de la variable
- First Row as Names : option à cocher si la première ligne est composée des noms des colonnes
- Sheet : sélectionner la feuille du classeur Excel que l’on souhaite employer
- NA : indiquer la manière dont les valeurs manquantes sont représentées dans la feuille Excel
- Skip : le nombre de premières lignes à ignorer (par exemple, si elles contiennent des métadonnées, ou si le tableau commence plus bas dans la feuille Excel)
- Open Data Viewer : permet de sélectionner ou désélectionner l’affichage des données
La représentation des valeurs manquantes peut varier d’un fichier à l’autre. Il est important de spécifier le code employé dans la feuille Excel pour représenter ces valeurs manquantes.
Il est également intéressant de sélectionner le type de variable que le jeu de donnée comporte. Pour ce faire dans le compartiment Data Preview, sélectionnez le type de la variable (exemple : caractère, numérique, …)
Remarque : les fichiers CSV offrent un plus large panel de types de variables, mais il est toujours possible de retravailler les variables dans R après importation.
Étape 7. Copiez le code s’affichant dans la case Code Preview (la petite icône à droite en forme de presse-papier le réalise facilement, voir encadré bleu ci-dessous) et refermez la boite de dialogue d’importation en cliquant sur le bouton Cancel.
Attention : ne pas cliquer sur le bouton Import. Les données seront effectivement importées, mais les instructions qui effectuent cette importation seront perdues, et l’action ne sera donc pas reprise dans le document. Passer toujours par cette étape de copier-coller des instructions dans le document R Notebook, R Markdown, ou script R qui utilise ces données !
Étape 8. Collez les instructions dans le document cible. S’il s’agit d’un document R Markdown ou R Notebook, vous devez coller ces instructions à l’intérieur d’un chunk R (avec fond gris clair), et non pas dans une zone Markdown ou dans le préambule (avec fond blanc).
Dans le cadre de l’utilisation d’un projet (dans notre cas Oursins) que l’on souhaite portable, il est intéressant d’employer des chemin d’accès relatifs aux divers fichiers au lieu de chemins d’accès absolus. Le chemin d’accès relatif comporte plusieurs avantages :
- Un chemin d’accès plus court à écrire
- Une plus grande portabilité. L’échange de document entre collaborateurs se fera alors sans problèmes car les chemins relatifs pointent vers des fichiers à l’intérieur du projet quel que soit l’endroit où le projet se situe sur le disque, à l’inverse des chemins absolus qui nécessitent de toujours placer le projet exactement au même endroit. Malheureusement, la boite de dialogue d’importation crée des instructions qui utilisent un chemin absolu vers le fichier à importer. Il faut donc, le transformer à la main. La copie d’écran ci-dessous montre (encadré bleu) trois instructions successives qui importent le même fichier de données. La première est un chemin absolu, la seconde utilise un chemin depuis le répertoire de l’utilisateur (note
~), et la troisième utilise un chemin relatif. C’est cette troisième forme que vous devez utiliser systématiquement dans des projets portables, c’est-à-dire, tous vos projets !
Notre rapport se trouve dans le sous-dossier Rapports du dossier Oursins (qui est le dossier principal de notre projet), il faut donc indiquer qu’on sort du sous-dossier Rapports (naviguer vers le dossier parent en indiquant ..) pour entrer dans le sous-dossier Data. Cela s’écrit donc : ../Data/OursinsIni.xlsx.
Voir Tutoriel “gestion des fichiers dans un projet et les chemins relatifs”.
Étape 9. Exécutez les instructions. Dans un script R, vous cliquez sur le bouton Run de la barre d’outils de l’éditeur. Dans un document R Markdown ou R Notebook, comme ici, vous cliquez sur la flèche verte an haut à droite du chunk (encadré bleu).
Le jeu de données Oursins est importé dans R et il s’affiche dans l’onglet Environment. On peut voir immédiatement qu’il comporte 100 observations (lignes dans le tableau) pour 7 variables (colonnes).
Félicitations ! Vous venez d’importer votre premier jeu de données, et vous avez réalisé cette importation de manière reproductible et portable au sein de votre projet Oursins. La même technique peut être utilisée pour importer des données dans d’autres formats, tels que des données provenant des logiciels statistiques SAS, SPSS ou Stata, ainsi que des données au format CSV (nous vous conseillons dans ce cas de chosir la seconde option From Text (readr) plus performante).
LS0tCnRpdGxlOiAiVHV0b3JpZWwgU0RELVVNT05TIDogSW1wb3J0YXRpb24gZGVzIGRvbm7DqWVzIgphdXRob3I6ICJFbmdlbHMgR3V5bGlhbm4gJiBHcm9zamVhbiBQaGlsaXBwZSIKZGF0ZTogIlZlcnNpb24gMS4xIC0gYXZyaWwgMjAxOCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAogICAgaGlnaGxpZ2h0OiBrYXRlCiAgICB0aGVtZTogc3BhY2VsYWIKLS0tCgoKIyMgT2JqZWN0aWYKCj4gVm91cyBmYW1pbGlhcmlzZXIgYXZlYyBsJ2ltcG9ydGF0aW9uIGRlIGRvbm7DqWVzIEV4Y2VsIG91IENTViBkYW5zIHVuIGRvY3VtZW50IFJTdHVkaW8gZGUgbWFuacOocmUgcmVwcm9kdWN0aWJsZS4KCgojIyBQcsOpcmVxdWlzCgoqIMOKdHJlIMOgIGwnYWlzZSBhdmVjIFJTdHVkaW8gOiB2b2lyIHR1dG9yaWVsICJwcmlzZSBlbiBtYWluIGRlIGxhIG1hY2hpbmUgdmlydHVlbGxlIGV0IGRlIFJTdHVkaW8iCiogw4p0cmUgY2FwYWJsZSBkZSBjcsOpZXIgdW4gcHJvamV0IGRhbnMgUlN0dWRpbyA6IHZvaXIgdHV0b3JpZWwgInV0aWxpc2F0aW9uIGRlcyBwcm9qZXRzIGRhbnMgUlN0dWRpbyIKCgojIyBQcm9jw6lkdXJlCgoqKsOJdGFwZSAxLioqIFBhcnRleiBk4oCZdW4gZG9jdW1lbnQgUiwgUiBNYXJrZG93biBvdSBlbmNvcmUgUiBOb3RlYm9vayBvdXZlcnQgZGFucyBSU3R1ZGlvLiBEYW5zIG5vdHJlIGNhcywgdW4gUiBOb3RlYm9vayBlc3Qgb3V2ZXJ0IMOgIHBhcnRpciBkdSBwcm9qZXQgYE91cnNpbnNgIGNyw6nDqSBkYW5zIGxlIHR1dG9yaWVsIHN1ciBsZXMgcHJvamV0cyBSU3R1ZGlvLiBJbnPDqXJlciB1biAqKmNodW5rIFIqKi4gKCoqU2kgbCdvbiBwYXJ0IHLDqWVsbGVtZW50IGR1IHR1dG9yaWVsIHByb2plY3QgUlN0dWRpbywgbGUgcmFwcG9ydCBlc3QgZMOpasOgIHNhdXZlZ2FyZMOpLi4uIGNlbGEgbmUgY29ycmVzcG9uZCBwYXMgw6AgbGEgY29waWUgZCfDqWNyYW4gYWN0dWVsbGUhKiopCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTAwLnBuZykKCi0tLS0KCioqw4l0YXBlIDIuKiogU8OpbGVjdGlvbm5leiBsZSBib3V0b24gKipJbXBvcnQgRGF0YXNldCoqIGRhbnMgbGEgYmFycmUgZCdvdXRpbHMgZGUgbCdvbmdsZXQgKipFbnZpcm9ubWVudCoqLiBTw6lsZWN0aW9ubmV6IGxlIHR5cGUgZGUgZmljaGllciBzb3VoYWl0w6kuIERhbnMgbGUgY2FzIHByw6lzZW50LCB1biBmaWNoaWVyIEV4Y2VsICgqKkZyb20gRXhjZWwqKikuIAoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMS5wbmcpCgotLS0tCgoqKsOJdGFwZSAzLioqIFVuZSBib2l0ZSBkZSBkaWFsb2d1ZSBz4oCZb3V2cmUuIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiAqKkJyb3dzZS4uLioqLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMi5wbmcpCgotLS0tCgoqKsOJdGFwZSA0LioqIFPDqWxlY3Rpb25uZXogbGUgamV1IGRlIGRvbm7DqWUgYE91cnNpbnNJbmkueGxzeGAgcXVpIHNlIHRyb3V2ZSBkYW5zIGxlIGRvc3NpZXIgYGRhdGFgLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMy5wbmcpCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA0LnBuZykKCi0tLS0KCioqw4l0YXBlIDUuKiogTGUgamV1IGRlIGRvbm7DqWUgc+KAmWFmZmljaGUgZGFucyBsYSBib2l0ZSBkZSBkaWFsb2d1ZSAqKkltcG9ydCBFeGNlbCBEYXRhKiouIENldHRlIGJvaXRlIGRlIGRpYWxvZ3VlIGVzdCBzdWJkaXZpc8OpZSBlbiB0cm9pcyB6b25lcyA6CgotICoqRGF0YSBQcmV2aWV3KiogOiBwcsOpdmlzdWFsaXNhdGlvbiBkZXMgZG9ubsOpZXMsCi0gKipJbXBvcnQgT3B0aW9ucyoqIDogb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIChjYWRyZSBibGV1KSBldAotICoqQ29kZSBQcmV2aWV3KiogOiBwcsOpdmlzdWFsaXNhdGlvbiBkZXMgaW5zdHJ1Y3Rpb25zIHBvdXIgbCdpbXBvcnRhdGlvbiAoY2FkcmUgb3JhbmdlKS4KCiFbXShmaWd1cmVzL2ltcG9ydF9kYXRhMDUucG5nKQoKLS0tLQoKKirDiXRhcGUgNi4qKiBEaWZmw6lyZW50cyBwYXJhbcOodHJlcyBwZXV2ZW50IMOqdHJlIGVtcGxvecOpcyBhZmluIGQnaW1wb3J0ZXIgbGUgamV1IGRlIGRvbm7DqWUgY29ycmVjdGVtZW50IGRhbnMgbGEgcGFydGllICoqSW1wb3J0IE9wdGlvbnMqKi4gSWwgZXN0IGNydWNpYWwgZGUgYmllbiBsZXMgY2hvaXNpciA6CgotICoqTmFtZSoqIDogbGUgbm9tIGRlIGxhIHZhcmlhYmxlCi0gKipGaXJzdCBSb3cgYXMgTmFtZXMqKiA6IG9wdGlvbiDDoCBjb2NoZXIgc2kgbGEgcHJlbWnDqHJlIGxpZ25lIGVzdCBjb21wb3PDqWUgZGVzIG5vbXMgZGVzIGNvbG9ubmVzCi0gKipTaGVldCoqIDogc8OpbGVjdGlvbm5lciBsYSBmZXVpbGxlIGR1IGNsYXNzZXVyIEV4Y2VsIHF1ZSBsJ29uIHNvdWhhaXRlIGVtcGxveWVyCi0gKipOQSoqIDogaW5kaXF1ZXIgbGEgbWFuacOocmUgZG9udCBsZXMgdmFsZXVycyBtYW5xdWFudGVzIHNvbnQgcmVwcsOpc2VudMOpZXMgZGFucyBsYSBmZXVpbGxlIEV4Y2VsCi0gKipTa2lwKiogOiBsZSBub21icmUgZGUgcHJlbWnDqHJlcyBsaWduZXMgw6AgaWdub3JlciAocGFyIGV4ZW1wbGUsIHNpIGVsbGVzIGNvbnRpZW5uZW50IGRlcyBtw6l0YWRvbm7DqWVzLCBvdSBzaSBsZSB0YWJsZWF1IGNvbW1lbmNlIHBsdXMgYmFzIGRhbnMgbGEgZmV1aWxsZSBFeGNlbCkKLSAqKk9wZW4gRGF0YSBWaWV3ZXIqKiA6IHBlcm1ldCBkZSBzw6lsZWN0aW9ubmVyIG91IGTDqXPDqWxlY3Rpb25uZXIgbCdhZmZpY2hhZ2UgZGVzIGRvbm7DqWVzCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA2LTEucG5nKQoKTGEgcmVwcsOpc2VudGF0aW9uIGRlcyB2YWxldXJzIG1hbnF1YW50ZXMgcGV1dCB2YXJpZXIgZCd1biBmaWNoaWVyIMOgIGwnYXV0cmUuIElsIGVzdCBpbXBvcnRhbnQgZGUgc3DDqWNpZmllciBsZSBjb2RlIGVtcGxvecOpIGRhbnMgbGEgZmV1aWxsZSBFeGNlbCBwb3VyIHJlcHLDqXNlbnRlciBjZXMgdmFsZXVycyBtYW5xdWFudGVzLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwNi0yLnBuZykKCklsIGVzdCDDqWdhbGVtZW50IGludMOpcmVzc2FudCBkZSBzw6lsZWN0aW9ubmVyIGxlIHR5cGUgZGUgdmFyaWFibGUgcXVlIGxlIGpldSBkZSBkb25uw6llIGNvbXBvcnRlLiBQb3VyIGNlIGZhaXJlIGRhbnMgbGUgY29tcGFydGltZW50ICoqRGF0YSBQcmV2aWV3KiosIHPDqWxlY3Rpb25uZXogbGUgdHlwZSBkZSBsYSB2YXJpYWJsZSAoZXhlbXBsZSA6IGNhcmFjdMOocmUsIG51bcOpcmlxdWUsIC4uLikgCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA2LTMucG5nKQoKKipSZW1hcnF1ZSA6KiogbGVzIGZpY2hpZXJzIENTViBvZmZyZW50IHVuIHBsdXMgbGFyZ2UgcGFuZWwgZGUgdHlwZXMgZGUgdmFyaWFibGVzLCBtYWlzIGlsIGVzdCB0b3Vqb3VycyBwb3NzaWJsZSBkZSByZXRyYXZhaWxsZXIgbGVzIHZhcmlhYmxlcyBkYW5zIFIgYXByw6hzIGltcG9ydGF0aW9uLiAKCi0tLS0KCioqw4l0YXBlIDcuKiogQ29waWV6IGxlIGNvZGUgc+KAmWFmZmljaGFudCBkYW5zIGxhIGNhc2UgKipDb2RlIFByZXZpZXcqKiAobGEgcGV0aXRlIGljw7RuZSDDoCBkcm9pdGUgZW4gZm9ybWUgZGUgcHJlc3NlLXBhcGllciBsZSByw6lhbGlzZSBmYWNpbGVtZW50LCB2b2lyIGVuY2FkcsOpIGJsZXUgY2ktZGVzc291cykgZXQgcmVmZXJtZXogbGEgYm9pdGUgZGUgZGlhbG9ndWUgZOKAmWltcG9ydGF0aW9uIGVuIGNsaXF1YW50IHN1ciBsZSBib3V0b24gKipDYW5jZWwqKi4KCiFbXShmaWd1cmVzL2ltcG9ydF9kYXRhMDcucG5nKQoKPiBBdHRlbnRpb24gOiBuZSAqKnBhcyoqIGNsaXF1ZXIgc3VyIGxlIGJvdXRvbiAqKkltcG9ydCoqLiBMZXMgZG9ubsOpZXMgc2Vyb250IGVmZmVjdGl2ZW1lbnQgaW1wb3J0w6llcywgbWFpcyBsZXMgaW5zdHJ1Y3Rpb25zIHF1aSBlZmZlY3R1ZW50IGNldHRlIGltcG9ydGF0aW9uIHNlcm9udCBwZXJkdWVzLCBldCBsJ2FjdGlvbiBuZSBzZXJhIGRvbmMgcGFzIHJlcHJpc2UgZGFucyBsZSBkb2N1bWVudC4gUGFzc2VyIHRvdWpvdXJzIHBhciBjZXR0ZSDDqXRhcGUgZGUgY29waWVyLWNvbGxlciBkZXMgaW5zdHJ1Y3Rpb25zIGRhbnMgbGUgZG9jdW1lbnQgUiBOb3RlYm9vaywgUiBNYXJrZG93biwgb3Ugc2NyaXB0IFIgcXVpIHV0aWxpc2UgY2VzIGRvbm7DqWVzICEKCi0tLS0KCioqw4l0YXBlIDguKiogQ29sbGV6IGxlcyBpbnN0cnVjdGlvbnMgZGFucyBsZSBkb2N1bWVudCBjaWJsZS4gUydpbCBzJ2FnaXQgZCd1biBkb2N1bWVudCBSIE1hcmtkb3duIG91IFIgTm90ZWJvb2ssIHZvdXMgX2RldmV6XyBjb2xsZXIgY2VzIGluc3RydWN0aW9ucyDDoCBsJ2ludMOpcmlldXIgZCd1biBjaHVuayBSIChhdmVjIGZvbmQgZ3JpcyBjbGFpciksIGV0IG5vbiBwYXMgZGFucyB1bmUgem9uZSBNYXJrZG93biBvdSBkYW5zIGxlIHByw6lhbWJ1bGUgKGF2ZWMgZm9uZCBibGFuYykuCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA4LnBuZykKCkRhbnMgbGUgY2FkcmUgZGUgbCd1dGlsaXNhdGlvbiBkJ3VuIHByb2pldCAoZGFucyBub3RyZSBjYXMgYE91cnNpbnNgKSBxdWUgbCdvbiBzb3VoYWl0ZSBwb3J0YWJsZSwgaWwgZXN0IGludMOpcmVzc2FudCBkJ2VtcGxveWVyIGRlcyBjaGVtaW4gZCdhY2PDqHMgcmVsYXRpZnMgYXV4IGRpdmVycyBmaWNoaWVycyBhdSBsaWV1IGRlIGNoZW1pbnMgZCdhY2PDqHMgYWJzb2x1cy4gTGUgY2hlbWluIGQnYWNjw6hzIHJlbGF0aWYgY29tcG9ydGUgcGx1c2lldXJzIGF2YW50YWdlcyA6IAoKLSBVbiBjaGVtaW4gZCdhY2PDqHMgcGx1cyBjb3VydCDDoCDDqWNyaXJlCi0gVW5lIHBsdXMgZ3JhbmRlIHBvcnRhYmlsaXTDqS4gTCfDqWNoYW5nZSBkZSBkb2N1bWVudCBlbnRyZSBjb2xsYWJvcmF0ZXVycyBzZSBmZXJhIGFsb3JzIHNhbnMgcHJvYmzDqG1lcyBjYXIgbGVzIGNoZW1pbnMgcmVsYXRpZnMgcG9pbnRlbnQgdmVycyBkZXMgZmljaGllcnMgw6AgbCdpbnTDqXJpZXVyIGR1IHByb2pldCAqKnF1ZWwgcXVlIHNvaXQgbCdlbmRyb2l0IG/DuSBsZSBwcm9qZXQgc2Ugc2l0dWUgc3VyIGxlIGRpc3F1ZSoqLCDDoCBsJ2ludmVyc2UgZGVzIGNoZW1pbnMgYWJzb2x1cyBxdWkgbsOpY2Vzc2l0ZW50IGRlIHRvdWpvdXJzIHBsYWNlciBsZSBwcm9qZXQgZXhhY3RlbWVudCBhdSBtw6ptZSBlbmRyb2l0LiBNYWxoZXVyZXVzZW1lbnQsIGxhIGJvaXRlIGRlIGRpYWxvZ3VlIGQnaW1wb3J0YXRpb24gY3LDqWUgZGVzIGluc3RydWN0aW9ucyBxdWkgdXRpbGlzZW50IHVuIGNoZW1pbiBhYnNvbHUgdmVycyBsZSBmaWNoaWVyIMOgIGltcG9ydGVyLiBJbCBmYXV0IGRvbmMsIGxlIHRyYW5zZm9ybWVyIMOgIGxhIG1haW4uIExhIGNvcGllIGQnw6ljcmFuIGNpLWRlc3NvdXMgbW9udHJlIChlbmNhZHLDqSBibGV1KSB0cm9pcyBpbnN0cnVjdGlvbnMgc3VjY2Vzc2l2ZXMgcXVpIGltcG9ydGVudCBsZSBtw6ptZSBmaWNoaWVyIGRlIGRvbm7DqWVzLiBMYSBwcmVtacOocmUgZXN0IHVuIGNoZW1pbiBhYnNvbHUsIGxhIHNlY29uZGUgdXRpbGlzZSB1biBjaGVtaW4gZGVwdWlzIGxlIHLDqXBlcnRvaXJlIGRlIGwndXRpbGlzYXRldXIgKG5vdGUgYH5gKSwgZXQgbGEgdHJvaXNpw6htZSB1dGlsaXNlIHVuIGNoZW1pbiByZWxhdGlmLiAqKkMnZXN0IGNldHRlIHRyb2lzacOobWUgZm9ybWUgcXVlIHZvdXMgZGV2ZXogdXRpbGlzZXIgc3lzdMOpbWF0aXF1ZW1lbnQgZGFucyBkZXMgcHJvamV0cyBwb3J0YWJsZXMsIGMnZXN0LcOgLWRpcmUsIHRvdXMgdm9zIHByb2pldHMgISoqCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA5LnBuZykKCk5vdHJlIHJhcHBvcnQgc2UgdHJvdXZlIGRhbnMgbGUgc291cy1kb3NzaWVyIGBSYXBwb3J0c2AgZHUgZG9zc2llciBgT3Vyc2luc2AgKHF1aSBlc3QgbGUgZG9zc2llciBwcmluY2lwYWwgZGUgbm90cmUgcHJvamV0KSwgaWwgZmF1dCBkb25jIGluZGlxdWVyIHF1J29uIHNvcnQgZHUgc291cy1kb3NzaWVyIGBSYXBwb3J0c2AgKG5hdmlndWVyIHZlcnMgbGUgZG9zc2llciBwYXJlbnQgZW4gaW5kaXF1YW50IGAuLmApIHBvdXIgZW50cmVyIGRhbnMgbGUgc291cy1kb3NzaWVyIGBEYXRhYC4gQ2VsYSBzJ8OpY3JpdCBkb25jIDogYC4uL0RhdGEvT3Vyc2luc0luaS54bHN4YC4KCj4gVm9pciBUdXRvcmllbCAiZ2VzdGlvbiBkZXMgZmljaGllcnMgZGFucyB1biBwcm9qZXQgZXQgbGVzIGNoZW1pbnMgcmVsYXRpZnMiLgoKLS0tLQoKKirDiXRhcGUgOS4qKiBFeMOpY3V0ZXogbGVzIGluc3RydWN0aW9ucy4gRGFucyB1biBzY3JpcHQgUiwgdm91cyBjbGlxdWV6IHN1ciBsZSBib3V0b24gKipSdW4qKiBkZSBsYSBiYXJyZSBkJ291dGlscyBkZSBsJ8OpZGl0ZXVyLiBEYW5zIHVuIGRvY3VtZW50IFIgTWFya2Rvd24gb3UgUiBOb3RlYm9vaywgY29tbWUgaWNpLCB2b3VzIGNsaXF1ZXogc3VyIGxhIGZsw6hjaGUgdmVydGUgYW4gaGF1dCDDoCBkcm9pdGUgZHUgY2h1bmsgKGVuY2FkcsOpIGJsZXUpLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGExMC5wbmcpCgpMZSBqZXUgZGUgZG9ubsOpZXMgYE91cnNpbnNgIGVzdCBpbXBvcnTDqSBkYW5zICoqUioqIGV0IGlsIHMnYWZmaWNoZSBkYW5zIGwnb25nbGV0ICoqRW52aXJvbm1lbnQqKi4gT24gcGV1dCB2b2lyIGltbcOpZGlhdGVtZW50IHF1J2lsIGNvbXBvcnRlIDEwMCBvYnNlcnZhdGlvbnMgKGxpZ25lcyBkYW5zIGxlIHRhYmxlYXUpIHBvdXIgNyB2YXJpYWJsZXMgKGNvbG9ubmVzKS4KCl9Gw6lsaWNpdGF0aW9ucyAhIFZvdXMgdmVuZXogZCdpbXBvcnRlciB2b3RyZSBwcmVtaWVyIGpldSBkZSBkb25uw6llcywgZXQgdm91cyBhdmV6IHLDqWFsaXPDqSBjZXR0ZSBpbXBvcnRhdGlvbiBkZSBtYW5pw6hyZSAqKnJlcHJvZHVjdGlibGUqKiBldCAqKnBvcnRhYmxlKiogYXUgc2VpbiBkZSB2b3RyZSBwcm9qZXQgYE91cnNpbnNgLiBMYSBtw6ptZSB0ZWNobmlxdWUgcGV1dCDDqnRyZSB1dGlsaXPDqWUgcG91ciBpbXBvcnRlciBkZXMgZG9ubsOpZXMgZGFucyBkJ2F1dHJlcyBmb3JtYXRzLCB0ZWxzIHF1ZSBkZXMgZG9ubsOpZXMgcHJvdmVuYW50IGRlcyBsb2dpY2llbHMgc3RhdGlzdGlxdWVzIFNBUywgU1BTUyBvdSBTdGF0YSwgYWluc2kgcXVlIGRlcyBkb25uw6llcyBhdSBmb3JtYXQgQ1NWIChub3VzIHZvdXMgY29uc2VpbGxvbnMgZGFucyBjZSBjYXMgZGUgY2hvc2lyIGxhIHNlY29uZGUgb3B0aW9uICoqRnJvbSBUZXh0IChyZWFkcikqKiBwbHVzIHBlcmZvcm1hbnRlKS5fCgotLS0tCgoKIyMgUG91ciBhbGxlciBwbHVzIGxvaW4uLi4KCioqVE9ETyoqCgpfQ29weXJpZ2h0IMKpIDIwMTctMjAxOCwgR3V5bGlhbm4gRW5nZWxzICYgUGhpbGlwcGUgR3Jvc2plYW4sIFtBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgNC4wIChDQyBCWS1OQy1TQSA0LjApXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wL2RlZWQuZnIpLl8K